package com.tansuo365.test1.service.kucunservice.kucunimpl;

import com.tansuo365.test1.bean.kucunbean.DaohuoDetails;
import com.tansuo365.test1.bean.kucunbean.DaohuoZong;
import com.tansuo365.test1.bean.kucunbean.WuliaoKucunRiZhi;
import com.tansuo365.test1.bean.kucunbean.WuliaoKucunSear;
import com.tansuo365.test1.mapper.kucunmapper.DaohuoDetailsMapper;
import com.tansuo365.test1.mapper.kucunmapper.DaohuoZongMapper;
import com.tansuo365.test1.mapper.kucunmapper.WuliaoKucunRiZhiMapper;
import com.tansuo365.test1.mapper.kucunmapper.WuliaoKucunSearMapper;
import com.tansuo365.test1.service.kucunservice.DaohuoZongService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.util.List;

//已加入save时的各自的单据保存和物料主表的更改以及物料日志表的新增
@Service
public class DaohuoZongServiceImpl implements DaohuoZongService {

    @Resource
    private DaohuoZongMapper daohuoZongMapper;
    @Resource
    private DaohuoDetailsMapper daohuoDetailsMapper;
    @Resource
    private WuliaoKucunSearMapper wuliaoKucunSearMapper;
    @Resource
    private WuliaoKucunRiZhiMapper wuliaoKucunRiZhiMapper;

    @Override
    public String getTodayMaxDaohuoDanNumber() {
        return daohuoZongMapper.getTodayMaxDaohuoDanNumber();
    }

    @Override
    public List<DaohuoZong> listDaohuoZong(DaohuoZong daohuoZong) {
        return daohuoZongMapper.listDaohuoZong(daohuoZong);
    }

    @Override
    public int deleteByPrimaryKey(Integer id) {
        return daohuoZongMapper.deleteByPrimaryKey(id);
    }

    @Override
    public int deleteBatchByPKArr(Integer[] ids) {
        return daohuoZongMapper.deleteBatchByPKArr(ids);
    }

    @Override
    public int insertSelective(DaohuoZong daohuoZong) {
        return daohuoZongMapper.insertSelective(daohuoZong);
    }

    //保存到货单主表和子表数据
    //同时加到库存中,有该库房下物料名,则进行update,否则insert,同时计算出结余
    //到货单怎样都可以insert,因为不像其它几类单据,库存没有该物料名称则无法insert
    @Override
    @Transactional
    public int saveZongAndDetails(DaohuoZong daohuoZong, List<DaohuoDetails> daohuoDetailsList) {
        int insertCode = 0;//用于返回添加成功与否
         insertCode = daohuoZongMapper.insertSelective(daohuoZong);
        if (!(insertCode > 0)) {
            return 0;
        }
        //遍历到货details的i, insertCode只是Zong的,所以可能是小于i的
        int i = 0;
//        int inKu = 0;
        int upKu = 0;
        int inSertRizhi = 0;
        Integer zongzhangId = daohuoZong.getId();
        //保存每个到货单物料
        for (DaohuoDetails daohuoDetails : daohuoDetailsList) {
            //设置对应总表id
            daohuoDetails.setZongzhangid(zongzhangId);
            i += daohuoDetailsMapper.insertSelective(daohuoDetails);
            //TODO 其他计算,到货单这里可以增加相应库存
            //根据物料名,库房名 查看现在库存查询表时候有该物料,有则返回物料名
//            String wuliaoKucunByWuliaoName = wuliaoKucunSearMapper.getWuliaoKucunByWuliaoName(daohuoDetails.getMingchengguige(), daohuoZong.getRukukufang());
//            //如果为空,执行新增
//            if(StringUtils.isEmpty(wuliaoKucunByWuliaoName)){
//                System.out.println("库存中暂无该物料,到货执行新增:"+daohuoDetails.getMingchengguige());
//                //如果为空,则说明库存主表没这个物料,执行新增
//                WuliaoKucunSear wuliaoKucunSear = new WuliaoKucunSear();
//                wuliaoKucunSear.setMingchengguige(daohuoDetails.getMingchengguige());
//                wuliaoKucunSear.setWuliaobianma(daohuoDetails.getWuliaobianma());
////                wuliaoKucunSear.setCreatetime(daohuoZong.getCreatetime());
//                wuliaoKucunSear.setDalei(daohuoDetails.getDalei());
//                wuliaoKucunSear.setDanwei(daohuoDetails.getDanwei());
//                wuliaoKucunSear.setQichukucun(null);
//                wuliaoKucunSear.setShourushuliang(daohuoDetails.getDaohuoshuliang());
//                wuliaoKucunSear.setFachushuliang(null);
//                wuliaoKucunSear.setTuihuishuliang(null);
//                wuliaoKucunSear.setJieyushuliang(daohuoDetails.getDaohuoshuliang());
//                wuliaoKucunSear.setJiagongyigong(daohuoDetails.getJiagongyigong());
//                wuliaoKucunSear.setRukukufang(daohuoZong.getRukukufang()); //入库库房
//                wuliaoKucunSear.setXiangmuweihu(daohuoZong.getXiangmumingcheng()); //项目名称
//                //新增一个物料库存 其中只有到货量和结余数量 其中第一条,到货量一定=结余数量
//                inKu += wuliaoKucunSearMapper.insertWuliaoDaohuoSelect(wuliaoKucunSear);
//            }else{
            //如果根据物料名,库房名查回来的物料名不为空,则说明该库存下该物料已经存在于库存查询主表中
            //进行库存的到货量的累加
//            upKu += wuliaoKucunSearMapper.updateWuliaoShouruShuliangByWuliaoName(daohuoDetails.getMingchengguige(), daohuoDetails.getDaohuoshuliang(), daohuoZong.getRukukufang());
//            }
            //TODO 将每个保存的详细insert到物料日志表
            WuliaoKucunRiZhi wuliaoKucunRiZhi = new WuliaoKucunRiZhi();
            wuliaoKucunRiZhi.setMingchengguige(daohuoDetails.getMingchengguige());
            wuliaoKucunRiZhi.setXiangmuweihu(daohuoZong.getXiangmumingcheng());
            wuliaoKucunRiZhi.setShourushuliang(daohuoDetails.getDaohuoshuliang());
            wuliaoKucunRiZhi.setJiagongyigong(daohuoDetails.getJiagongyigong());
            wuliaoKucunRiZhi.setDanwei(daohuoDetails.getDanwei());
            wuliaoKucunRiZhi.setWuliaobianma(daohuoDetails.getWuliaobianma());
            wuliaoKucunRiZhi.setDalei(daohuoDetails.getDalei());
            wuliaoKucunRiZhi.setRukukufang(daohuoZong.getRukukufang());
            inSertRizhi += wuliaoKucunRiZhiMapper.insertSelective(wuliaoKucunRiZhi);
        }
        //不是插入就是新增库存数据,所以i也会等于inKu+upKu
        if (!(i == daohuoDetailsList.size() && i != 0 )) {
            return 0;
        }
        if (!(inSertRizhi==daohuoDetailsList.size())) {
            return 0;
        }
        return i; //返回的值是插入详细到货单物料的数量
    }

    @Override
    public DaohuoZong selectByPrimaryKey(Integer id) {
        return daohuoZongMapper.selectByPrimaryKey(id);
    }

    @Override
    public int updateByPrimaryKeySelective(DaohuoZong daohuoZong) {
        return daohuoZongMapper.updateByPrimaryKeySelective(daohuoZong);
    }

    @Override
    public int updateBindStatus(Integer bind,String danhao) {
        return daohuoZongMapper.updateBindStatus(bind,danhao);
    }
}
